import pandas as pd

# 从 IMDB-Movie-Data.csv 文件中读取电影数据
movies = pd.read_csv(r"D:\桌面\Python实验\IMDB-Movie-Data.csv")

movies.head()

movies.info()

### 6.5.3 案例实现
# 计算 Rating 一列的平均值
rating_mean = movies['Rating'].mean()
# 保留一位小数
rating_mean = round(rating_mean, 1)
rating_mean
import numpy as np
# 获取 Director 一列的导演数据，并筛选唯一的导演数据
np.unique(movies['Director']).shape[0]

import matplotlib.pyplot as plt

# 1.绘制图像
plt.figure(figsize=(20, 8), dpi=100)
plt.hist(movies["Runtime (Minutes)"].values, bins=20, color='c', alpha=0.7)

# 2.完善图表
plt.title('电影的片长分布情况')

max_ = movies["Runtime (Minutes)"].max()
min_ = movies["Runtime (Minutes)"].min()
tick_arr = np.linspace(min_, max_, num=21)
plt.xticks(tick_arr)

plt.xlabel('片长')
plt.ylabel('频数')

plt.grid()

plt.show()
# 1.绘制图像
plt.figure(figsize=(20, 8), dpi=100)
plt.hist(movies["Runtime (Minutes)"].values, bins=20, color='c', alpha=0.7)

# 2.完善图表
plt.title('电影的片长分布情况')

max_ = movies["Runtime (Minutes)"].max()
min_ = movies["Runtime (Minutes)"].min()
tick_arr = np.linspace(min_, max_, num=21)
plt.xticks(tick_arr)

plt.xlabel('片长')
plt.ylabel('频数')

plt.grid()

plt.show()
# 创建元素为0的DataFrame类的对象,列索引是电影类型
zeros = np.zeros(movies.shape[0], genre_list.shape[0])
temp_movie = pd.DataFrame(zeros, columns=genre_list)
temp_movie.head()

# 遍历每一部电影,把分类出现的值重置为1
for i in range(1000):
    temp_movie.loc[i, temp_list[i]] = 1
temp_movie.head()

# 计算temp_movie每列的和,按从大到小的顺序排列
genre = temp_movie.sum().sort_values(ascending=False)
genre

# 1.绘制图像
plt.figure(figsize=(20,8), dpi=100)

# 获取所有电影类型的数量
movie_genre_counts = genre.values
# 获取所有的电影类型
movie_genre = genre.index.values
# 根据前面获取的数据,在当前画布的绘图区域上绘制图像
rect_genre = plt.bar(x_data, movie_genre_counts, tick_label=movie_genre, color='deepskyblue')

# 2.1 设置标题
plt.title('电影的类型统计情况')
# 2.2 设置坐标轴的标签
plt.ylabel('电影数量')
# 2.3 添加注释文本
def autolabel(rects):
    """在每个柱形上方添加注释文本"""
    for rect in rects:
        rect_height = rect.get_height() # 获取每个柱形的高度
        rect_x = rect.get_x() # 获取每个柱形的x值
        rect_width = rect.get_width() # 获取每个柱形的宽度
        plt.text(rect_x + rect_width/2, rect_height+5,
                 s='{:.0f}'.format(rect_height),
                 ha='center', va='bottom', fontsize=10)
autolabel(rect_genre)
# 3.展示图表
plt.show()
